#@Time : 2021/10/2814:41
#@Author : xujian
# 那么回到之前我们读取的狗名字统计的数据上，我们尝试一下刚刚的方法
#
#
# 那么问题来了：
# 很多同学肯定想知道使用次数最高的前几个名字是什么呢？
# sort_values()是文件对象的操作方法
# df.sort_values(by="Count_AnimalName",ascending=False)
#
#
# 那么问题又来了：
# 如果我的数据有10列，我想按照其中的第1，第3，第8列排序，怎么办？
#       (看ipythpn的帮助文档)
#

# https://blog.csdn.net/jewely/article/details/87869893?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.highlightwordscore&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-4.highlightwordscore

import pandas
#导入数据
dogs=pandas.read_csv('dogNames2.csv')

# 1.
# #进行排序(默认升序)（ascending=False代表降序）
# sort_dogs=dogs.sort_values(by='Count_AnimalName')
# #去后十行
# print(sort_dogs.tail(10))


# 中括号写数组表示取行
# 中括号写字符串表示取列，对列进行操作
#2.取行
# print(dogs[:20])  #取前20个


#3.取列
# print(dogs["Row_Labels"])  #这是一个Series类型

#4取行和列
# print(dogs[:20]["Row_Labels"])
# print(type(dogs[:20]["Row_Labels"]))  #<class 'pandas.core.series.Series'>

#5.locyu与iloc
# 还有更多的经过pandas优化过的选择方式：
# df.loc 通过标签索引行数据 ----->需要标签
# df.iloc 通过位置获取行数据
# 创建一个DataFrame的数据
import numpy as np

#使用了randint我想让他每次生的随机数一样
#所以我要种一颗种子(提前声明)
np.random.seed(10)
array1=pandas.DataFrame(np.random.randint(1,20,(3,4)),index=list("abc"),columns=list("wxyz"))

print(array1)

#     w   x   y  z
# a  10   5  16  1
# b  18  17  18  9
# c  10   1  11  9
#最好在定义是就给处行列索引的名字

#单个
# print(array1.loc["a","w"])   #10

#连续
# print(array1.loc["a",["w","z"]])
                        # w    10
                        # z     1
# <class 'pandas.core.series.Series'>

#不连续多行多列
# print(array1.loc["a":,"w":])  #全部
# print(array1.loc["a":"c","w":"x"])  #部分

                            #     w   x
                            # a  10   5
                            # b  18  17
                            # c  10   1
# print(array1.loc["a":"c",["w","z"]])  #部分
                            #     w  z
                            # a  10  1
                            # b  18  9
                            # c  10  9
#iloc(通过位置)  同上
# print("*"*10)
# print(array1.iloc[0,0])

#6.布尔索引
#挑选w列中大于10的数
# print(array1[array1["w"]>10])  #返回的是一个DaraFrame

#挑选行中大于1
# 这句错的原因是索引中写字符串是在列索引中寻找  --》详见上2
# print(array1[array1["a"]>1])
# print(array1[array1["a":]>1])
                    #     w     x   y    z
                    # a  10   5.0  16  NaN
                    # b  18  17.0  18  9.0
                    # c  10   NaN  11  9.0
# 6.2回到之前狗的名字的问题上，假如我们想找到所有的使用次数超过700
# 并且名字的字符串的长度大于4的狗的名字，应该怎么选择？
#复合选择的问题
#选择w中大于10或者x中大于5的
print("*********************")
a2=array1[array1["w"]>10]

print(a2)


#6.3我们想找到所有的使用次数超过700并且名字的字符串的长度小于4的狗的名字
print((dogs["Row_Labels"].str.len()<4)&(dogs["Count_AnimalName"]>700))















